package com.hw01.exception;

import com.hw01.controller.vo.ResultVO;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @ClassName GlobalExceptionAdvice
 * @Description TODO
 * @Author Kx
 * @Date 2025/5/13 14:01
 * @Version 1.0
 */
// 拦截所有controller包下的异常
@RestControllerAdvice(basePackages = "com.hw01.controller")
public class GlobalExceptionAdvice {

    /**
     * @author: kx
     * @date: 2025/5/13 15:00
     * @param globalException : 异常信息
     * @return com.ch06.controller.vo.ResultVO<T>
     * @description: 处理项目中最顶级的异常(如果子类出异常了也会被此方法捕捉)
    */
    @ExceptionHandler(GlobalException.class) // 拦截所有GlobalException异常
    public <T> ResultVO<T> handleGlobalException(GlobalException globalException) {
        globalException.printStackTrace();

        // 创建响应类对象
        ResultVO<T> resultVO = new ResultVO<>();
        // 设置错误码
        resultVO.setCode(globalException.getErrorCode());
        // 设置错误信息
        resultVO.setMessage(globalException.getMessage());
        return resultVO;
    }

    /**
     * @author: kx
     * @date: 2025/5/13 15:12
     * @param globalException : 异常信息
     * @return com.ch06.controller.vo.ResultVO<T>
     * @description: 处理异常中最大的异常兜底
    */
    @ExceptionHandler(Exception.class) // 拦截所有Exception异常
    public <T> ResultVO<T> handleException(GlobalException globalException) {
        globalException.printStackTrace();

        // 创建响应类对象
        ResultVO<T> resultVO = new ResultVO<>();
        // 设置错误码
        resultVO.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        // 设置错误信息
        resultVO.setMessage("服务器繁忙,请稍后尝试");
        return resultVO;
    }
}
